// 这是头文件
#include <iostream>
#include <cstring>
#include <vector>
#include <algorithm>
#include <cstdlib>

using namespace std;

/*  int main () {}   -- 为一个整体    */

/*
					// 变量
int main()
{
	int x;	  // 定义一个整型变量x，用于存储整数数据
	double y; // 定义一个双精度浮点型变量y，用于存储带小数点的数字
	x = 5;	  // 给变量x赋值为整数5
	std::cout << "请输入一个数字：";
	std::cin >> y;
	//  从标准输入(键盘)读取一个数字，存储到变量y中
	// 使用std::cout输出变量x和y的值
	// "\n"表示换行符，endl也表示换行并刷新输出缓冲区

	cout << "变量x和y的值为:" << endl;
	std::cout << x << "\n"
			  << y << endl;
	// 输出变量x和y的值

	// sizeof运算符用于获取数据类型或变量占用的内存大小(字节数)
	// 输出int类型在当前系统/编译器环境下占用的字节数
	std::cout << "int类型占用的内存大小为：" << endl;
	std::cout << sizeof(int) << std::endl;

	// 输出变量x占用的内存大小(与sizeof(int)结果相同)
	std::cout << "变量x占用的内存大小为：" << endl;
	std::cout << sizeof(x) << std::endl;

	// bool  布尔型
	// char  字符型
	// int   整型
	// float 浮点型
	// double 双精度浮点型
	// const  常量
	// void  无类型
	// wchar_t 宽字符型 ---可查阅数据类型和标识符命名规则(保留字)

	cout << "\n";

	return 0;
}

*/

/*
int main ()
{

	//字符
	cout << "字符" << endl;
	char ch = 'A';  // 定义并初始化字符变量
	cout << "字符的内容为：" << ch << endl;

	// 字符串
	cout << "字符串" << endl;
	char str[] = "Hello, World!";  // 定义并初始化字符串
	cout<<"字符串的内容为：" << endl;
	cout << str << endl;

	// 访问字符串
	cout << "字符串的第一个字符为：" << endl;
	cout << str[0] << endl;

	// 获取字符串长度
	int length = strlen(str);
	cout << "字符串的长度为：" << length << endl;

	// 遍历字符串
	for (int c = 0; c < length; c++) {
		cout << str[c] << " ";
	}


	cout<<"\n";

	return 0;
}

*/

/*
int main()
{
	//布尔类型
	bool flag = true;  // 定义并初始化布尔变量
	cout << "布尔变量的值为：" << flag << endl;

	// 布尔类型只有两个取值：true和false
	// true表示真，false表示假
	// 布尔类型通常用于条件判断和循环控制

	cout << "\n";

	return 0;

}

*/

/*
int main()
{
	// 浮点型
	cout << "浮点型" << endl;
	float f = 3.14; // 定义并初始化浮点变量
	cout << "单精度浮点变量的值为：" << f << endl;
	double d = 2.718281828459; // 定义并初始化双精度浮点变量
	cout << "双精度浮点变量的值为：" << d << endl;
	// 浮点型用于表示小数，包括单精度浮点型(float)和双精度浮点型(double)

	system("pause");
	return 0;

}

*/

/*
int main()
{
	// 常量
	cout << "常量" << endl;
	const int MAX_VALUE = 100; // 定义一个整型常量
	cout << "整型常量的值为：" << MAX_VALUE << endl;

	// 常量在程序运行时不可修改，通常用于定义一些固定的值，如数学常数、配置参数等

	cout << "\n";

	return 0;
}
*/

/*
						  // 运算符
int main(){

	// 算术运算符
	cout << "算术运算符" << endl;
	int a = 10, b = 3;
	std::cout << a << " + " << b << " = " << a + b << std::endl; // 加法
	std::cout << a << " - " << b << " = " << a - b << std::endl; // 减法
	std::cout << a << " * " << b << " = " << a * b << std::endl; // 乘法
	std::cout << a << " / " << b << " = " << a / b << std::endl; // 除法
	std::cout << a << " % " << b << " = " << a % b << std::endl; // 取模(取余)

	cout << "\n";

	// 自增自减运算符
	cout << "自增自减运算符" << endl;
	std::cout << "a=" << a << std::endl;
	std::cout << "b=" << b << std::endl;
	a++;
	b--;
	std::cout << "a++ = " << a << std::endl; // 后缀自增
	std::cout << "b-- = " << b << std::endl; // 后缀自减

	//后缀自增(后加加) a++:先返回变量a的当前值,然后对a的值加1
	//后缀自增(后加加) a++:先返回变量a的当前值,然后对a的值加1

	cout << "\n";

	// 赋值运算符
	cout << "赋值运算符" << endl;
	int c = 5;
	cout << "c = " << c << endl;
	c += 3;
	std::cout << " c+= 3 = " << c << std::endl;

	cout << "\n";

	// 关系运算符
	cout << "关系运算符" << endl;
	int d = 7, e = 4;
	// 关系运算符示例：比较变量d和e的值
	std::cout << d << " == " << e << " >> " << (d == e) << std::endl;
	// 判断d是否等于e，输出比较结果(true=1/false=0)
	std::cout << d << " != " << e << " >> " << (d != e) << std::endl;
	// 判断d是否不等于e，输出比较结果(true=1/false=0)

	cout << "\n";

	// 逻辑运算符
	cout << "逻辑运算符" << endl;
	int f = 1, g = 0;
	// 逻辑运算符示例
	std::cout << f << " && " << g << " >> " << (f && g) << std::endl;
	// 逻辑与运算，当f和g都为真时结果为1，否则为0
	std::cout << f << " || " << g << " >> " << (f || g) << std::endl;
	// 逻辑或运算，当f或g任一为真时结果为1，否则为0
	std::cout << "!" << f << " >> " << (!f) << std::endl;
	// 逻辑非运算，对f的值取反(真变假，假变真)

	cout << "\n";

	// 位运算符
	cout << "位运算符" << endl;
	int h = 5, i = 3;
	// 位运算符示例
	std::cout << h << " & " << i << " = " << (h & i) << std::endl;
	// 按位与运算，对应位都为1时结果为1，否则为0
	std::cout << h << " | " << i << " = " << (h | i) << std::endl;
	// 按位或运算，对应位任一为1时结果为1，否则为0
	std::cout << h << " ^ " << i << " = " << (h ^ i) << std::endl;
	// 按位异或运算，对应位不同时结果为1，相同时为0
	std::cout << "~" << h << " = " << (~h) << std::endl;
	// 按位取反运算，所有位取反(0变1，1变0)
	std::cout << h << " << 1 = " << (h << 1) << std::endl;
	// 左移运算，所有位向左移动1位，低位补0
	std::cout << h << " >> 1 = " << (h >> 1) << std::endl;
	// 右移运算，所有位向右移动1位，高位补符号位

	cout << "\n";

	// 条件运算符
	cout << "条件运算符" << endl;
	int j = 10, k = 20;
	std::cout << "j=" << j << endl;
	std::cout << "k=" << k << endl;
	std::cout << "(j > k ? j : k)=" << (j > k ? j : k) << std::endl;
	// 使用三目运算符(条件运算符)比较j和k的值
	// 如果j > k成立，则输出j的值，否则输出k的值
	// 条件表达式 ? 表达式1 : 表达式2

	cout << "\n";

	return 0;
}

*/

/*   int main () {}   -- 为一个整体   */

// ------------------循环结构

/*
int main ()
{

	// if 语句
	cout<<"if 语句"<<endl;
	int num;
	cout<<"请输入一个数字：";
	cin>>num;
	if(num > 10) {
		cout<<num<<"大于10"<<endl;
	}else{
		cout<<num<<"小于等于10"<<endl;
	}

	cout<<"\n";






	// if else if 语句判断成绩等级
	int score;
	cout<<"请输入你的分数：";
	cin>>score;
	if(score >= 90) {
		cout<<"你的等级为A"<<endl;
	}else if(score >= 80) {
		cout<<"你的等级为B"<<endl;
	}else if(score >= 70) {
		cout<<"你的等级为C"<<endl;
	}else if(score >= 60) {
		cout<<"你的等级为D"<<endl;
	}else{
		cout<<"你的等级为E"<<endl;
	}

	cout<<"\n";






	//判断一个年份是否为闰年
	// 闰年的判断条件：
	// 1.年份能被4整除，但不能被100整除
	// 2.年份能被400整除
	cout<<"判断一个年份是否为闰年"<<endl;
	int year;
	cout<<"请输入一个年份：";
	cin>>year;
	if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
		cout<<year<<"是闰年"<<endl;
	}

	else{
		cout<<year<<"不是闰年"<<endl;
	}

	cout<<"\n";

	return 0;
	system("pause");
}

*/

/*
int main()
{
	// while循环

	int i = 1;
	cout << "while循环" << "\n";
	cout << "打印1到10的数字:" << "\n";
	while (i <= 10)
	{
		cout << "i = " << i << endl;
		i++;
	}

	cout << "\n";

	// do...while循环

	int j = 1;
	cout << "do...while循环" << "\n"
		 << "打印1到10的数字:" << "\n";
	do
	{
		cout << "j = " << j << endl;
		j++;
	} while (j <= 10);

	cout << "\n";

	cout << "for循环" << "\n";
	// for循环

	cout << "打印1到10的数字:" << "\n";
	for (int k = 1; k <= 10; k++)
	{
		cout << "k = " << k << endl;
	}

	cout << "\n";







	// 计算1到n的和
	cout << "计算1到n的和" << "\n";
	int n, sum = 0, m = 1;
	cin >> n;

	while (m <= n)
	{
		sum += m;
		m++;
	}

	cout << "1到" << n << "的和是：" << sum << "\n";

	return 0;
	system("pause");
}

*/

/*
int main()
{

	//switch 语句
	// 判断数字1到7对应的星期几
	cout<<"switch 语句"<<"\n";
	int day;
	cout<<"请输入一个数字1-7:";
	cin>>day;
	switch(day) {
		case 1:
			cout<<"星期一";
			break;
		case 2:
			cout<<"星期二";
			break;
		case 3:
			cout<<"星期三";
			break;
		case 4:
			cout<<"星期四";
			break;
		case 5:
			cout<<"星期五";
			break;
		case 6:
			cout<<"星期六";
			break;
		case 7:
			cout<<"星期日";
			break;
		default:
			cout<<"输入错误,请输入1-7之间的数字"<<"\n";

	}

	system("pause");
	return 0;

}
*/

// ---------------派生数据类型

/*
int main()
{

	// 数组
	cout << "数组" << "\n";
	int arr[5] = {1, 2, 3, 4, 5}; // 定义并初始化

	// * 访问,索引从0开始
	cout << "数组的第一个元素为：" << "\n";
	cout << arr[0] << "\n";

	int size = sizeof(arr) / sizeof(arr[0]); // 计算数组的长度
	cout << "数组的长度为：" << size << "\n";

	for (int i = 0; i < size; i++)
	{
		cout << "索引" << i << " = " << arr[i] << "\n";
	}

	cout << "\n";

	return 0;
}

*/

/*
int main ()
{

	// 指针
	cout << "指针" << endl;
	int num = 10;
	cout<<"num = "<<num<<endl;
	int *p = &num;  // 定义并初始化指针

	// 访问指针指向的值
	cout << "指针指向的值为：";
	cout << *p << "\n";


	cout<<"\n";


	system("pause");
	return 0;

}

*/

/*
int main()
{
	// 二维数组
	cout << "二维数组" << endl;
	int arr2[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};

	// 访问第一个元素
	cout << "二维数组的第一个元素为：" << endl;
	cout << arr2[0][0] << endl;

	// 获取行数和列数
	int rows = sizeof(arr2) / sizeof(arr2[0]);
	int cols = sizeof(arr2[0]) / sizeof(arr2[0][0]);

	cout << "二维数组的行数为：" << rows << endl;
	cout << "二维数组的列数为：" << cols << endl;
	cout << "二维数组的总元素个数为：" << rows * cols << endl;

	// 遍历二维数组
	for (int i = 0; i < rows; i++)
	{
		for (int j = 0; j < cols; j++)
		{
			cout << arr2[i][j] << " ";
		}
		cout << endl;
	}

	cout << "\n";

	return 0;
}

*/

// 函数定义

/*
int add(int a, int b)
{
	return a + b; // 返回两数之和
}

int main()
{

	// 函数
	cout << "函数" << "\n";
	int num1 = 10, num2 = 5;
	cout << "num1 = " << num1 << endl;
	cout << "num2 = " << num2 << endl;

	int sum = add(num1, num2); // 调用函数
	cout << "两数之和为: " << sum << endl;

	system("pause");
	return 0;
}

*/

/*
// 重载函数定义
int add(int a, int b)
{
	return a + b; // 返回两数之和
}

double add(double a, double b)
{
	return a + b; // 返回两数之和
}

int main()
{
	using namespace std; // 使用标准命名空间

	cout << "函数重载" << endl;

	int num1 = 10, num2 = 5;
	double num3 = 3.14, num4 = 2.71;

	cout << "num1 = " << num1 << endl;
	cout << "num2 = " << num2 << endl;
	cout << "num3 = " << num3 << endl;
	cout << "num4 = " << num4 << endl;

	int sumInt = add(num1, num2);		// 调用整型重载函数
	double sumDouble = add(num3, num4); // 调用双精度浮点型重载函数

	cout << "整型两数之和为: " << sumInt << endl;
	cout << "双精度浮点型两数之和为: " << sumDouble << endl;

	system("pause");
	return 0;
}


*/
